/**
 * 获取一组数的最大值
 * 
 * @memberof data
 * 
 * @param {Array} value 数据数组(必传)
 * <br /> 支持格式：[1,2,3] 和
 * <br /> [{name:'zhangsan',value:10},{name:'lisi',value:20}]
 * 
 * @param {String} key json数据的 key 值（可选）
 * <br /> 默认为 value 
 * 
 * @returns 数据最大值
 * 
 * @example  
 * getMax([1,2,3]); // 3
 * getMax([{name:'zhangsan',value:10},{name:'lisi',value:20}],value); // 20
 */
function getMax(value, key) {
    let v = value;
    const {
        isType
    } = this
    key = key || 'value'
    let max = - Infinity;
    if (v instanceof Array) {
        v.forEach(item => {
            if (isType(item, 'Object')) {
                max = (item[key] || - Infinity) > max ? item[key] : max
            }
            if (isType(item, 'Number')) {
                max = (item || - Infinity) > max ? item : max
            }
        })
    }
    return max
}
/**
 * 获取一组数的最小值
 * 
 * @memberof data
 * 
 * @param {Array} value 数据数组(必传)
 * <br /> 支持格式：[1,2,3] 和
 * <br /> [{name:'zhangsan',value:10},{name:'lisi',value:20}]
 * 
 * @param {String} key json数据的 key 值（可选）
 * <br /> 默认为 value 
 * 
 * @returns 数据最小值
 * 
 * @example  
 * getMin([1,2,3]); // 1
 * getMin([{name:'zhangsan',value:10},{name:'lisi',value:20}],value); // 10
 */
function getMin(value, key) {
    let v = value;
    const {
        isType
    } = this
    key = key || 'value'
    let min = Infinity;
    if (v instanceof Array) {
        v.forEach(item => {
            if (isType(item, 'Object')) {
                min = (item[key] || Infinity) < min ? item[key] : min
            }
            if (isType(item, 'Number')) {
                min = (item || Infinity) < min ? item : min
            }
        })
    }
    return min
}
/**
 * 获取一组数的总值
 * 
 * @memberof data
 * 
 * @param {Array} value 数据数组(必传)
 * <br /> 支持格式：[1,2,3] 和
 * <br /> [{name:'zhangsan',value:10},{name:'lisi',value:20}]
 * 
 * @param {String} key json数据的 key 值（可选）
 * <br /> 默认为 value 
 * 
 * @returns 数据总值
 * 
 * @example  
 * getTotal([1,2,3]); // 6
 * getTotal([{name:'zhangsan',value:10},{name:'lisi',value:20}],value); // 30
 */
function getTotal(value, key) {
    let v = value;
    const {
        isType
    } = this
    key = key || 'value'
    let total = 0;
    if (v instanceof Array) {
        v.forEach(item => {
            if (isType(item, 'Object')) {
                total += item[key] || 0
            }
            if (isType(item, 'Number')) {
                total += item || 0
            }
        })
    }
    return total 
}
module.exports.getMax = getMax
module.exports.getMin = getMin
module.exports.getTotal = getTotal
